﻿// ===============================================================================
//  Copyright © ymind.net. All rights reserved .
//  官方网站：http://ymind.net/
//  版权所有：彦铭工作室 老陈出品
// ===============================================================================

using System;
using System.Runtime.InteropServices;
using System.Web;
using Lcsoft.TemplateEngine.Core;

namespace Lcsoft.TemplateEngine.XHtmlParser
{
	/// <summary>
	/// 表示 xhtml 文档的 attribute 属性。
	/// </summary>
	[ComVisible(true)]
	[Serializable]
	public sealed class XHtmlAttribute
	{
		private string _attributeValue;
		private bool _singleQuotes;

		/// <summary>
		/// 初始化 <see cref="XHtmlAttribute"/> 类的新实例。
		/// </summary>
		/// <param name="name"><see cref="XHtmlAttribute"/> 的名称。</param>
		internal XHtmlAttribute(string name)
		{
			if (String.IsNullOrEmpty(name)) throw new ParseException("参数错误", "必须为 XHtmlAttribute 对象指定合法的 Name 属性，其值不能为 null，也不能为 String.Empty。");

			this.Name = name;
		}

		/// <summary>
		/// 初始化 <see cref="XHtmlAttribute"/> 类的新实例。
		/// </summary>
		/// <param name="name"><see cref="XHtmlAttribute"/> 的名称。</param>
		/// <param name="value"><see cref="XHtmlAttribute"/> 的值。</param>
		internal XHtmlAttribute(string name, string value) : this(name)
		{
			if (value == null) return;

			if (value.StartsWith("'") && value.EndsWith("'"))
			{
				this._singleQuotes = true;
				this._attributeValue = value.Trim('\'');
			}
			else this._attributeValue = value.Trim('"');
		}

		/// <summary>
		/// 获取 <see cref="XHtmlAttribute"/>  的名称。
		/// </summary>
		public string Name { get; private set; }

		/// <summary>
		/// 获取 <see cref="XHtmlAttribute"/> 的值。
		/// </summary>
		public string Value
		{
			get { return this._attributeValue; }
			set
			{
				if (value == null) this._attributeValue = null;
				else
				{
					if (value.StartsWith("'") && value.EndsWith("'"))
					{
						this._singleQuotes = true;
						this._attributeValue = value.Trim('\'');
					}
					else this._attributeValue = value.Trim('"');
				}
			}
		}

		/// <summary>
		/// 返回包含 <see cref="XHtmlAttribute"/> 内容的 .html 格式的字符串。
		/// </summary>
		/// <returns>返回 <see cref="System.String"/>。</returns>
		public string ToHtml() { return (null == this._attributeValue) ? this.Name : string.Format("{0}={2}{1}{2}", this.Name, HttpUtility.HtmlEncode(this._attributeValue), this._singleQuotes ? "'" : "\""); }

		/// <summary>
		/// 返回表示 <see cref="XHtmlAttribute"/> 的字符串。
		/// </summary>
		/// <returns>返回 <see cref="System.String"/>。</returns>
		public override string ToString() { return (null == this._attributeValue) ? this.Name : string.Format("{0}=\"{1}\"", this.Name, this._attributeValue); }
	}
}
